/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package supervision.administrative;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import system.general.Exc;
import system.general.Logged;
import system.general.Message;
import system.general.Persistencia;

/**
 *
 * @author emojica
 */
@ManagedBean(name = "supervision_administrative")
@RequestScoped
public class Main extends Beans {

    //Variables de importación General
    Logged logged;
    private Persistencia persistencia = new Persistencia();
    private Message msg = new Message();
    //Variables de importación otros modulos
    //Variables del modulo
    private Find supervision_administrativeFind = new Find();
    private List<Beans> supervision_administrativeList = new ArrayList<>();
    private List<request.location.Beans> sede_requestList = new ArrayList<>();
    //Variables locales
    private String sql;
    private Map<String, String> map = new LinkedHashMap<>();
    private request.location.Find find_Sede = new request.location.Find();
    public Respuestas respuesta = new Respuestas();
    private request.status.Main request_status = new request.status.Main();
    private int idl_estatus = 0;
    private int cantidad_encuestas = 0;

    public Main() throws Exc, SQLException, Exception {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        logged = (Logged) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "logged");
        load();
    }

    private void load() throws Exc, SQLException, Exception {
        try {
            if (logged.getMasterId() == 0) {
                return;
            }
//            respuesta.logged = logged;
//            respuesta.load();
//
//            map.clear();
//            map.put("id_solicitud = " + logged.getMasterId(), "");
//            supervision_administrativeList = supervision_administrativeFind.byMap(map);

            sql = "SELECT COUNT(id_solicitud) AS encuestas FROM public.supervision_administrativa WHERE id_solicitud=" + logged.getMasterId() + " AND idl_pregunta=0";
            ResultSet encuestas = persistencia.executeRsts(sql);
            encuestas.next();
            this.setCantidad_encuestas(encuestas.getInt("encuestas"));

//            if (supervision_administrativeList.isEmpty()) {
//                setObservacion("");
//
//            } else {
//                setObservacion(supervision_administrativeList.get(0).getObservacion());
//
//            }

        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }

    }

    public void insert() {
        try {

            if (logged.getMasterId() == 0) {
                throw new Exc("m4");
            }
            //Verifica si se ha seleccionado un registro
            map.clear();
            map.put("id_solicitud = " + logged.getMasterId(), " ");


            //Verifica si el registro existe, de lo contrario lo inserta
            if (supervision_administrativeFind.byExist(map)) {
                //delete();
                idl_estatus = 6;
            } else {
                idl_estatus = 5;
            }

            for (int i = 1; i < respuesta.Pregunta.length; i++) {
                for (int j = 0; j < respuesta.Pregunta[i].size(); j++) {
                    setIdl_pregunta(i);
                    setIdl_respuesta(Integer.parseInt(respuesta.Pregunta[i].get(j).toString()));
                    sql = "INSERT INTO public.supervision_administrativa (id_solicitud, idl_pregunta, idl_respuesta) "
                            + "VALUES (" + logged.getMasterId() + ", " + getIdl_pregunta() + ",  " + getIdl_respuesta() + ")";

                    //Inserta los registros
                    persistencia.executeUpdate(sql);
                }
            }
            //inserta el campo de observaciones
            sql = "INSERT INTO public.supervision_administrativa (id_solicitud, idl_pregunta, idl_respuesta, observacion) "
                    + "VALUES (" + logged.getMasterId() + ", 0, 0,'" + getObservacion() + "')";
            persistencia.executeUpdate(sql);
            map.clear();
            map.put("css.id= " + logged.getMasterId(), " ");
            this.sede_requestList = find_Sede.byMap(map);

            setId_solicitud(sede_requestList.get(0).getId_sede());

            request_status.insert(getId_solicitud(), idl_estatus, request_status.getRealizado(), logged.getLoggedId());

            throw new Exc("m1");

        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void delete() {
        try {
            deleteById(logged.getMasterId());

            throw new Exc("m2");
        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void deleteById(int id) throws Exc, SQLException, Exception {
        //Elimina los detalle por id
        sql = "DELETE FROM public.supervision_administrativa "
                + "WHERE id_solicitud = " + id;
        persistencia.executeUpdate(sql);
    }

    public Respuestas getRespuestas() {
        return respuesta;
    }

    private String namePackage() {
        Package pack = this.getClass().getPackage();
        return pack.getName();
    }

    /**
     * @return the cantidad_encuestas
     */
    public int getCantidad_encuestas() {
        return cantidad_encuestas;
    }

    /**
     * @param cantidad_encuestas the cantidad_encuestas to set
     */
    public void setCantidad_encuestas(int cantidad_encuestas) {
        this.cantidad_encuestas = cantidad_encuestas;
    }
}
